import java.util.*;

//请写一个整数计算器，支持加减乘三种运算和括号。
//
//数据范围：  0≤∣s∣≤100，保证计算结果始终在整型范围内
public class Solution {
    //使用两个栈 nums和ops
    //nums 存放所有的数字  ops 存放所有数字以外的操作

    //使用map维护一个运算符优先级
    Map<Character,Integer> map = new HashMap<Character,Integer>(){ {
      put('-',1);
      put('+',1);
      put('*',2);
    }};
    public int solve(String s){
        //将所有的空格去掉
        s = s.replaceAll(" ","");
        char[] cs = s.toCharArray();
        int n = s.length();

        //存放所有数字
        //deque双端队列 允许在头尾进行插入和删除操作
        Deque<Integer> nums = new ArrayDeque<>();
        //避免第一个是操作符 先加入一个0
        nums.addLast(0);
        //存放所有非数字操作
        Deque<Character> ops = new ArrayDeque<>();
        for(int i = 0; i < n; i++){
            char c = cs[i];
            if(c =='('){
                ops.addLast(c);
            } else if (c==')') {
                //计算到最近的括号为止
                while(!ops.isEmpty()){
                    if(ops.peekLast() != '('){
                        calc(nums,ops);
                    }else {
                        ops.pollLast();
                        break;
                    }
                }
            } else {
                if(isNumber(c)){
                    int u = 0;
                    int j = i;
                    //将从i位置开始后面的连续数字整体取出，加入nums
                    while(j < n && isNumber(cs[j])){
                        u = u * 10 + (cs[j++] - '0');
                        nums.addLast(u);
                        i = j - 1;
                    }
                } else{
                    if(i > 0 && (cs[i - 1] == '(' || ))
                }
            }
        }

    }

    private void calc(Deque<Integer> nums, Deque<Character> ops) {
        if(nums.isEmpty() || nums.size() < 2)
            return;
        if(ops.isEmpty())
            return;
        int ans = 0;
        int b = nums.pollLast(), a = nums.pollLast();
        char op = ops.pollLast();
        if(op == '+'){
            ans = a+b;
        } else if (op == '-') {
            ans = a-b;
        } else if (op == '*') {
            ans = a*b;
        }
        nums.addLast(ans);
    }
    boolean isNumber(char c){
        //Character.isDigit(c) 是 Java 中用于判断字符 c 是否为数字的内置方法
        return Character.isDigit(c);
    }

}
